package programDetails;

import letcode.util.ListNode;

import java.util.*;

/**
 * @Description: 队列的相关方法
 * @Date: 2020/4/14
 * @Author: 许群星
 */
public class _2_4_MapSortPrintln {
    public static void main(String[] args) {

        //排序 借用treemap  treemap是默认按key升序排序，降序的话要使用比较器
        Map<Integer,Integer> map=new TreeMap<>();
        map.put(1,5);
        map.put(3,2);
        map.put(2,4);
        //treemap按key降序
        Map<Integer,Integer> map1=new TreeMap<>(new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                return o2.compareTo(o1);  //降序
            }
        });
        //treemap按照value进行排序，借助Collections的sort(List<T> list,Compartator<? super T>c)
        List<Map.Entry<Integer,Integer>> list=new ArrayList<>();
        Collections.sort(list, new Comparator<Map.Entry<Integer,Integer>>() {
            @Override
            public int compare(Map.Entry<Integer,Integer> o1, Map.Entry<Integer,Integer> o2) {
                return o1.getValue().compareTo(o2.getValue());
            }
        });


        //输出所有  解用set和Iterator    类型为Map.Entry
        Set set=map.entrySet();
        Iterator<Map.Entry> iter=set.iterator();
        while(iter.hasNext()){
            Map.Entry mp=iter.next();
            System.out.println(mp.getKey()+" "+mp.getValue());
        }

        //
    }
}
/*
https://www.cnblogs.com/liujinhong/p/6113183.html
1、四种map比较
    HashMap：我们最常用的Map，它根据key的HashCode 值来存储数据,根据key可以直接获取它的Value，
    同时它具有很快的访问速度。HashMap最多只允许一条记录的key值为Null(多条会覆盖);允许多条记录的Value为 Null。非同步的。

    TreeMap: 能够把它保存的记录根据key排序,默认是按升序排序，也可以指定排序的比较器，
    当用Iterator 遍历TreeMap时，得到的记录是排过序的。TreeMap不允许key的值为null。非同步的。

    Hashtable: 与 HashMap类似,不同的是:key和value的值均不允许为null;它支持线程的同步，
    即任一时刻只有一个线程能写Hashtable,因此也导致了Hashtale在写入时会比较慢。

    LinkedHashMap: 保存了记录的插入顺序，在用Iterator遍历LinkedHashMap时，
    先得到的记录肯定是先插入的.在遍历的时候会比HashMap慢。key和value均允许为空，非同步的。
 */